package morenoapp.model.data;

import java.net.URI;
import java.util.Date;
import morenoapp.model.enums.MorenoPollType;
import morenoapp.model.meta.MethodDelegate;
import morenoapp.model.meta.MethodGetter;
import morenoapp.model.meta.MethodSetter;
import morenoapp.model.meta.ValueIfNoModel;

/**
 * Метаданные о модели.
 *
 * @author dmitry.mamonov
 */
public interface MorenoModelMetadataFace {
    /**
     * Получить адрес хранилища (файла) в которое данная
     * модель была сохранена последний раз.
     * @return
     */
    @MethodGetter
    @ValueIfNoModel("null")
    URI getStoreURI();

    /**
     * Получить дату создания модели.
     * @return
     */
    @MethodGetter
    @ValueIfNoModel("null")
    Date getCreationDate();

    /**
     * Получить дату последнего сохранения модели.
     * @return
     */
    @MethodGetter
    @ValueIfNoModel("null")
    Date getLastSaveDate();

    /**
     * Получить версию модели. Версия отражает количество
     * изменений произведённых в модели.
     * @return
     */
    @MethodGetter
    @ValueIfNoModel("0L")
    long getVersion();

    /**
     * Получить минимальную версию приложения с которой
     * совместима данная модель.
     * @return
     */
    @MethodGetter
    @ValueIfNoModel("0L")
    long getVersionComaptibility();

    /**
     * Получить последний сгенерированный идентификатор модели.
     * @return
     */
    @MethodGetter
    @ValueIfNoModel("0L")
    long getLastId();

    /**
     * Установить последний сгенерированный идентификатор модели.
     * @param id
     */
    @MethodSetter
    void setLastId(long id);

    /**
     * Сгенерировать очередной уникальный идентификатор модели и получить его.
     * @return
     */
    @MethodDelegate
    long nextId();
}
